// Constantes Globales
var img_loading		= "<img src='img/loading.gif'></img> ";

// Variables
var tecnico_actual_id = 0;

// Variables Google Maps
var map;

// Variables Tabs
var tab;					// Número de tab actual

// Radios
var colores = [];
colores[0] = "#bbbbbb";	// Sin decidir
colores[1] = "#da4f49"; // Descartado
colores[2] = "#00ff00";	// Preseleccionado
colores[3] = "#49afcd";	// Seleccionado
colores[4] = "#0000ff"; // Técnico ITECE

// Markers
var markerClusterer;			// MarkerClusterer de los candidatos
var markerClustererOptions = {
	gridSize: 30, 
	maxZoom: 15
};

/**
 * Dibuja un candidato en el Mapa de Google Maps.
 * @param value	Valores con la información del candidato.
 * @param animation true si se encuentra animado, false si no.
 * @param radio true si dibuja el radio, false si no.
 */
function draw_candidato(value, animation, radio) {
	// Posición
	var anima;
	var position = new google.maps.LatLng(value.latitud, value.longitud);

	// Radio
	var radio = new google.maps.Circle({
		map: map,
		center: position,
		radius: value.radio * 1000,
		strokeColor: colores[value.estado],
		strokeOpacity: 0.8,
		strokeWeight: 2,
		fillColor: colores[value.estado],
		fillOpacity: 0.15,
		visible: true,
		tecnicoID: value.id
	});

	// Chincheta
	if (animation) anima = google.maps.Animation.BOUNCE;
	else anima = google.maps.Animation.DROP;
	var marker = new google.maps.Marker({
		map: map,
		icon: chinchetas[value.estado],
		title: value.poblacion,
		position: position,
		animation: google.maps.Animation.BOUNCE
	});

	// Eventos	
	google.maps.event.addListener(marker, 'click', function() {
		abrirTecnico(value.uid, false);
	});
	google.maps.event.addListener(marker, 'rightclick', function() {
		abrirTecnico(value.uid, true);
	});

	// Añade el marker
	value.marker 	= marker;
	value.radio 	= radio;
	tecnicos[tab][value.uid] = value;
	tecnicosCluster[tab].push(marker);
}

/**
 *
 * @param value
 * @param animation
 * @param radio
 */
function draw_provincia(value, id) {
	// Variables
	var hab = value.habitantes;

	if(hab < 5000)			{ icon = icon_url_path + "city-small-1" 	+ ".png"; } 
	else if(hab < 15000) 	{ icon = icon_url_path + "city-small-2" 	+ ".png"; } 
	else if(hab < 25000) 	{ icon = icon_url_path + "city-medium-1" 	+ ".png"; } 
	else if(hab < 50000) 	{ icon = icon_url_path + "city-medium-2" 	+ ".png"; } 
	else if(hab < 100000) 	{ icon = icon_url_path + "city-big-1" 		+ ".png"; } 
	else 					{ icon = icon_url_path + "city-big-2" 		+ ".png"; }

	// Chincheta
	var marker = new google.maps.Marker({
		map: map,
		icon: icon,
		title: value.poblacion,
		position: new google.maps.LatLng(value.latitud, value.longitud),
		animation: google.maps.Animation.DROP
	});

	// Eventos
	google.maps.event.addListener(marker, 'click', function() {
		abrirProvincia(value.latitud, value.longitud);
	});

	// Añade el marker
	value.marker 	= marker;
	value.radio 	= null;
	tecnicos[tab][id] = value;
	tecnicosCluster[tab].push(marker);
}

/**
 * Inicialización del formulario de Candidatos.
 */
function candidatos_init() {
	$('#button_poblaciones').on('click', function() {
		// Constantes
		var mcOptions = {
			gridSize: 3, 
			maxZoom: 10
		};

		// Variables
		var tab 		= tabCounter;
		var nombre 		= $('#input_nombre').val();
		var id 			= $('#input_uid').val();		// duplicado
		var latitud 	= $('#input_latitud').val();
		var longitud 	= $('#input_longitud').val();
		var radio 		= $('#input_radio').val();
		tecnico_actual_id = $('#input_uid').val();		// duplicado
		var contenido;
		var i 			= 0;

		// Inicialización
		tecnicos[tab]			= new Array();
		tecnicosCluster[tab] 	= new Array();

		// Crea el tab actual
		addTab('Poblaciones de ' + nombre + ' (' + tecnico_actual_id + ')', img_loading + "Cargando ...", true);

		// Candidato
		$.ajax({
			dataType: "json",
			url: 'tecnicos/view/' + id,
			success: function (value){
				draw_candidato(value, true, true);
			}
		});

		// Poblaciones
		totalhabitantes = 0;
		$.ajax({
			dataType: "json",
			url: 'poblaciones/listAllByPosition',
			data: {'lat': latitud, 'lng': longitud, 'rad': radio},
			success: function(data) {				
				contenido = "<table><tr><th></th><th>Población</th><th>Distancia (km)</th><th>Habitantes</th></tr>";

				//
				$.each(data, function(key, value){
					// Información Tabs
					totalhabitantes += parseInt(value.habitantes);
					contenido += "<tr>" + 
								"<td><input name='poblaciones_check' type='checkbox' value='" + value.poblacion + "'></td>" +
								"<td><a href='#' onclick='abrirPoblacion(" + value.poblacion + ");'>" + value.poblacion + "</a></td>" +
								"<td>" + Math.round(value.distance) + "</td>" +
								"<td>" + value.habitantes + "</td>" +
								"</tr>";

					//
					if(i == id) i++;	// El candidato conserva su posición del UID
					draw_provincia(value, i++);
				});


				// Tab
				contenido += 
					'<tr><td colspan="3"><b>Total Habitantes<b></td><td><b>' + totalhabitantes + '</b></td></tr>' +
					'</table>' +
					'<center>' + 
					"<input class='btn' type='button' onclick='markAllPoblaciones(" + $('text_uid').val() + ")'' value='Marcar Todos'>" +
				 	"<input class='btn' type='button' onclick='savePoblacionChanges(" + $('text_uid').val() + ")' value='Guardar Cambios'>" +
				 	'</center>';
				$('#tabs-' + tab).html(contenido);
			}
		});

		//
		alert('TecnicosCluster: ' + tecnicosCluster[tab]);
		markerClusterer = new MarkerClusterer(map, tecnicosCluster[tab], mcOptions);
		alert('[New] Clusters: ' + markerClusterer.getTotalClusters() + ' Markers: ' + markerClusterer.getTotalMarkers());
	});

	$('#input_radio').on('change', function() {
		// Variables
		var uid 	= $('#input_uid').val();
		var radio 	= $('#input_radio').val();

		// Modifica la distancia del radio
		tecnicos[tab][uid].radio.setRadius(radio * 1000);

		// Actualiza la bd
		$.ajax({
			type: "POST",
			url: 'tecnicos/setRadio',
			data: {'uid': uid, 'radio': radio}
		});
	});

	$('#input_puntuacion').on('change', function() {
		// Variables
		var uid 	= $('#input_uid').val();
		var nota	= $(this).val();

		// Valor del texto
		$('#text_puntuacion').text(parseFloat($('#input_puntuacion').val()).toFixed(1));

		// Actualiza la bd
		$.ajax({
			type: "POST",
			url: 'tecnicos/setPuntuacion',
			data: {'uid': uid, 'nota': nota}
		});
	});
}

/**
 * Inicialización del formulario de Poblaciones.
 */
function poblaciones_init() {
	$('#button_candidatos').on('click', function(){
		// Constantes
		var mcOptions = {
			gridSize: 0, 
			maxZoom: 30
		};

		// Variables
		var content;
		var tab 		= tabCounter;

		// Variables de Entrada
		var latitud 	= $('#input_latitud').val();
		var longitud 	= $('#input_longitud').val();
		var poblacion 	= $('#input_poblacion').val();

		// Inicialización
		tecnicos[tab] 			= new Array();
		tecnicosCluster[tab] 	= new Array();

		// Añade una nueva pestaña
		addTab("Candidatos cerca de " + poblacion, img_loading + "Cargando ...", true);

		// Consulta JSON
		$.getJSON('tecnicos/listAllByPosition/?lat='+latitud+'&lng='+longitud, function(data){
			content = "<table><tr><th></th><th>Nombre</th><th>Distancia (km)</th></tr>";
			$.each(data, function(key, value){
				// Tab
				content += "<tr>" +
						"<td><i class='icon-user'></i></td>" + 
						"<td><a href='javascript:abrirTecnico(" + value.id + ");'>" + value.nombre + "</a></td>" +
						"<td>" + value.distancia + "</td></tr>";

				// Mapa
				// Chincheta
				var marker = new google.maps.Marker({
					map: map,
					icon: chinchetas[value.estado],
					title: value.nombre,
					position: new google.maps.LatLng(value.latitud, value.longitud),
					animation: google.maps.Animation.DROP,
					tecnicoID: value.id
				});
				
				// Eventos
				google.maps.event.addListener(marker, 'click', function() {
					abrirTecnico(this.tecnicoID);
				});
				google.maps.event.addListener(marker, 'dblclick', function(event) {
					map.setOptions({
						center: event.latLng,
						zoom: 15
					});
					abrirTecnico(this.tecnicoID);
				});

				// Añade el marker
				value.marker = marker;
				tecnicos[tab][value.id] = value;
				tecnicosCluster[tab].push(marker);

				// Conjunto de Chinchetas
				markerClusterer = new MarkerClusterer(map, tecnicosCluster[tab]);
			});

			$('#tabs-' + tab).html("</table>" + content);
		});
	});
}

function savePoblacionChanges() {
	$.ajax({
		url: 'tecnicos/savePoblaciones?candidato=' + tecnico_actual_id,
		type: "POST",
		data: $('input:checked'),
		success: function() {
			alert('Guardado con Exito!!!');
		}
	});
}

function markAllPoblaciones() {
	$(':checkbox').attr('checked', 'checked');
}

/**
 * Activa o desactiva el radio del técnico actual.
 */
function toggleRadio(){
	// Variables
	var uid = $('#input_uid').val();
	
	is_visible = tecnicos[tab][uid].radio.getVisible();
	if(!is_visible) {
		$('#button_toggle_radio').addClass('disabled');
	} else {
		$('#button_toggle_radio').removeClass('disabled');
	}		
	tecnicos[tab][uid].radio.setVisible(!is_visible);
}

/**
 * Activa o desactiva los radios de un conjunto de técnicos.
 * @param radio_type Tipo de radio a activar.
 *		0 - Téc. Sin decidir
 *		1 - Téc. Descartado
 *		2 - Téc. Preseleccionado
 *		3 - Téc. Seleccionado
 */
function toggleRadios(radio_type) {
	// Variables
	var checkbox 	= '#checkbox_radio_' + radio_type;
	var visible 	= $(checkbox).is(':checked');

	// Activa/Desactiva los radios de los técnicos
	$.each(tecnicos[tab], function(key, value){	
		if(value != undefined) { 
			if(value.estado == radio_type)
				value.radio.setVisible(visible);
		}
	});
}

/**
 * Activa o desactiva los radios de los técnicos pre/seleccionados.
 */
 /*
function toggleRadioAll() {
	// Variables
	var checkbox 	= '#checkbox_radio_all';
	var visible 	= $(checkbox).is(':checked');

	// Activa/Desactiva los radios de los técnicos
	$.each(tecnicos[tab], function(key, value){	
		if(value != undefined) { 
			if(value.estado == 2 || value.estado == 3) // 2 = Técnico Preseleccionado, 3 = Técnico Seleccionado
				value.radio.setVisible(visible);
		}
	});
}*/

/**
 * Activa o desactiva los radios de los técnicos pre/seleccionados.
 */
 /*
function toggleRadioSin() {
	// Variables
	var checkbox 	= '#checkbox_radio_sin';
	var visible 	= $(checkbox).is(':checked');

	// Activa/Desactiva los radios de los técnicos
	$.each(tecnicos[tab], function(key, value){	
		if(value != undefined) { 
			if(value.estado == 0) // 0 = Técnico sin decidir
				value.radio.setVisible(visible);
		}
	});
}*/

/**
 * Activa/desactiva los radios de los técnicos ITECE.
 */
 /*
function toggleRadioITECE() {
	// Variables
	var checkbox 	= '#checkbox_radio_itece';
	var visible 	= $(checkbox).is(':checked');

	// Activa/Desactiva los radios de los técnicos ITECE
	$.each(tecnicos[tab], function(key, value){	
		if(value != undefined) { 
			if(value.estado == 4) // 4 = Técnico ITECE
				value.radio.setVisible(visible);
		}
	});
}*/

function selecciona(n) {
	// Variables
	var uid = $('#input_uid').val();

	$('#botones-seleccion input').removeClass('disabled');
	$('#bsel'+n).addClass('disabled');
	
	$.ajax({
		type: 'POST',
		url: 'tecnicos/selecciona',
		data: {'uid': uid, 'estado': n}	
	});
	tecnicos[tab][uid].estado = n;
	tecnicos[tab][uid].marker.setIcon(chinchetas[n]);
	tecnicos[tab][uid].radio.setOptions(
	{
		strokeColor: colores[n],
		fillColor: colores[n]
	});
}

$(function(){

});